package daoImpl;

import java.util.List;

import javax.persistence.EntityManager;

import modelo.Login;
import modelo.Reserva;
import dao.DAOGeneral;
import dao.IReservaDAO;

public class ReservaDAOImpl extends DAOGeneral implements IReservaDAO {

	private EntityManager em;

	public ReservaDAOImpl() {
		em = getEntityManager();
	}
	
	public void insertar(Reserva res) {
		em.getTransaction().begin();
		em.persist(res);
		em.getTransaction().commit();
	}

	public Reserva update(Reserva res) {
		em.getTransaction().begin();
		Reserva resx = (Reserva) this.seleccionarPorId(res.getId().getDni(), res.getId().getIdPista());
		resx.setFechaReserva(res.getFechaReserva());
		resx.setFechaReservada(res.getFechaReservada());
		if(res.getHorario()!=null)
		{
			resx.setHorario(res.getHorario());
		}
		if(res.getUsuario()!=null)
		{
			resx.setUsuario(res.getUsuario());
		}
		if(res.getPista()!=null)
		{
			resx.setPista(res.getPista());
		}
		 em.getTransaction().commit();
		 return (Reserva)this.seleccionarPorId(resx.getId().getDni(), resx.getId().getIdPista());
	}

	public void borrar(Reserva res) {
		em.remove(res);

	}

	public Reserva seleccionarPorId(String dni,int id_pista) 
	{
		//Tiene que devolver un obejto que cumpla que id_pista = x && dni=y con ReservaPK que es id
		return (Reserva)em.createNamedQuery("Reserva.seleccionarPorDobleId").setParameter("dni", dni).setParameter("id_pista",id_pista).getSingleResult();
	}
	
	@SuppressWarnings("unchecked")
	public List<Reserva> seleccionarTodasReservas()
	{
		return (List<Reserva>) em.createNamedQuery("Reserva.seleccionarTodasReservas").getResultList();
	}
	
	@SuppressWarnings("unchecked")
	public List<Reserva> disponibilidadPista(int id_pista)
	{
		return (List<Reserva>) em.createNamedQuery("Reserva.disponibilidadPista").setParameter("id_pista", id_pista).getResultList();
	}

}
